package com.zhichat.web.controller;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONArray;
import com.zhichat.service.UserInfoService;
import com.zhichat.web.api.R;
import com.zhichat.web.dto.LoginDTO;
import com.zhichat.web.dto.RegisterDTO;
import com.zhichat.web.dto.UserInfoUpdateDTO;
import com.zhichat.web.vo.LoginVO;
import com.zhichat.web.vo.UserInfoVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;

/**
 * 用户功能
 *
 * @Author: insanetz https://space.bilibili.com/602197686
 * @CreateDate: 2025/02/27 14:24
 */
@Slf4j
@Validated
@AllArgsConstructor
@RestController
@RequestMapping("/user")
public class UserController {

    private final UserInfoService userInfoService;

    /**
     * 注册
     */
    @PostMapping("/register")
    public R<String> register(@Validated @RequestBody RegisterDTO registerDTO) {
        return R.status(userInfoService.register(registerDTO));
    }

    /**
     * 登录
     */
    @PostMapping("/login")
    public R<LoginVO> login(@Validated @RequestBody LoginDTO loginDTO) {
        return R.success(userInfoService.login(loginDTO));
    }

    /**
     * 获取当前登录用户信息
     */
    @GetMapping("/curUserInfo")
    public R<LoginVO> getCurUserInfo() {
        return R.success(userInfoService.getCurUserInfo());
    }

    /**
     * 用户 详情
     */
    @GetMapping("/detail")
    public R<UserInfoVO> detail(@RequestParam("userId") Long userId) {
        return R.success(userInfoService.detail(userId));
    }

    /**
     * 用户信息 修改/保存
     */
    @PostMapping("/update")
    public R<UserInfoVO> updateUserInfo(@Validated UserInfoUpdateDTO userInfoUpdateDTO) throws IOException {
        return R.success(userInfoService.updateUserInfo(userInfoUpdateDTO));
    }

    /**
     * 修改 用户密码
     */
    @PostMapping("/updatePassword")
    public R<String> updatePassword(@RequestParam("oldPassword") String oldPassword, @RequestParam("newPassword") String newPassword) {
        return R.status(userInfoService.updatePassword(oldPassword, newPassword));
    }

    /**
     * 用户账号 退出登录状态
     */
    @PostMapping("/logout")
    public R<String> logout() {
        return R.status(userInfoService.logout());
    }

    /**
     * 短信模版审批回调
     *
     * @param array
     * @return
     */
    @PostMapping("/resMsg")
    public JSONObject resMsg(@RequestBody JSONArray array) {
        // TODO：您需要自行处理回执消息，此示例只打印回执信息
        /**
         * aliyun:
         *      失败： [{"reason":"<br/>模板内容  1.变量格式错误，应如${code}，其中$符在{ }外面，变量名称不能为空，且变量首字母必须为英文字母，只支持字母、数字和下划线组成，不能为纯数字；; 2.变量内容不明确，需要能清晰判断需要传参的内容，示例：兹定于${time}于${place}召开${content}会议，请准时参加；;","template_name":"测试短信模板123333","template_status":"rejected","template_content":"亲爱的商家您好，{1}您提交的租金付款凭证{2}","template_type":"系统","create_date":"2025-02-28 17:42:05","order_id":"20064504192","template_code":"SMS_479870065"}]
         *      成功： [{"template_name":"测试短信模板123333","template_status":"approved","template_content":"亲爱的商家您好，{1}您提交的租金付款凭证{2}","template_type":"系统","create_date":"2025-02-28 17:42:05","order_id":"20064504192","template_code":"SMS_479870065"}]
         * tencent:
         *      失败：
         *      成功；
         */
        System.out.println(array.toJSONString());
        JSONObject json = new JSONObject(); // 返回给aliyun的信息，必须这么写，它才能确认
        json.put("code", 0);
        json.put("msg", "接收成功");
        return json;
    }
}
